package com.bo.libnet.example;

/**
 * Created by ZJB on 2018/1/31.
 *
 * @ copyright: iwhere chengdu technology
 */

public class CustomInterceptorExample {

    //应用拦截器：主要用于设置公共参数，头信息，日志拦截等,有点类似Retrofit的Converter
//    private static Interceptor appIntercepter = new Interceptor() {
//        @Override
//        public Response intercept(Chain chain) throws IOException {
//            Request request = processRequest(chain.request());
//            Response response = processResponse(chain.proceed(request));
//            return response;
//        }
//    };
//
//    //访问网络之前，处理Request(这里统一添加了Cookie)
//    private static Request processRequest(Request request) {
//        String session = CacheManager.restoreLoginInfo(BaseApplication.getContext()).getSession();
//        return request
//                .newBuilder()
//                .addHeader("Cookie", "JSESSIONID=" + session)
//                .build();
//    }
//
//    //访问网络之后，处理Response(这里没有做特别处理)
//    private static Response processResponse(Response response) {
//        return response;
//    }



    //应用拦截器：设置缓存策略
//    private static Interceptor cacheIntercepter = new Interceptor() {
//        @Override
//        public Response intercept(Chain chain) throws IOException {
//            Request request = chain.request();
//
//            //无网的时候强制使用缓存
//            if (NetUtil.getNetState() == NetUtil.NetState.NET_NO) {
//                request = request.newBuilder()
//                        .cacheControl(CacheControl.FORCE_CACHE)
//                        .build();
//            }
//
//            Response response = chain.proceed(request);
//
//            //有网的时候读接口上的@Headers里的配置，你可以在这里进行统一的设置
//            if (NetUtil.getNetState() != NetUtil.NetState.NET_NO) {
//                String cacheControl = request.cacheControl().toString();
//                return response.newBuilder()
//                        .header("Cache-Control", cacheControl)
//                        .removeHeader("Pragma")
//                        .build();
//            } else {
//                int maxStale = 60 * 60 * 24 * 28; // tolerate 4-weeks stale
//                return response.newBuilder()
//                        .header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)
//                        .removeHeader("Pragma")
//                        .build();
//            }
//        }
//
//    };

//    OkHttp3中有一个Cache类是用来定义缓存的，此类详细介绍了几种缓存策略,具体可看此类源码。
//    noCache ：不使用缓存，全部走网络
//    noStore ： 不使用缓存，也不存储缓存
//    onlyIfCached ： 只使用缓存
//    maxAge ：设置最大失效时间，失效则不使用
//    maxStale ：设置最大失效时间，失效则不使用
//    minFresh ：设置最小有效时间，失效则不使用
//    FORCE_NETWORK ： 强制走网络
//    FORCE_CACHE ：强制走缓存



    //网络拦截器：主要用于重试或重写
//    private static Interceptor netIntercepter = new Interceptor() {
//        @Override
//        public Response intercept(Chain chain) throws IOException {
//            Request request = chain.request();
//            Response response = chain.proceed(request);
//            int tryCount = 0;
//            while (!response.isSuccessful() && tryCount < sMaxTryCount) {
//                tryCount++;
//                response = chain.proceed(request);
//            }
//            return response;
//        }
//    };


}
